package DAO;

import models.Documento;
import java.util.Collection;
import java.util.List;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.EntityTransaction;
import javax.persistence.Persistence;
import javax.persistence.Query;
import javax.swing.JOptionPane;

public class DocumentoDao {

    protected EntityManager em;
    private Documento ar = new Documento();

    public DocumentoDao(EntityManager em) {
        this.em = em;
    }

    public DocumentoDao() {
    }

    public Documento crearDocumento(String nombredoc, String fecharealizacion,
            String elaboradopor) {
//        Documento a = new Documento(nombredoc, fecharealizacion, elaboradopor);
//        em.persist(a);//con esta funcion lo guarda en la base de datos
//        return a;

        return null;
    }

    public Documento encontrarDocumento(Integer iddocumento) {
        return em.find(Documento.class, iddocumento);// con esta funcion se buscas un dato por primary key, el primer parametro es nuestra clase entidad
    }

    public void borrarDocumento(Integer iddocumento) {
        Documento a = encontrarDocumento(iddocumento);//en este caso podemos borrar un usuario por nombre
        if (a != null) {//si no lo encuentra por supuesto no lo intenta borrar
            em.remove(a);// borra de la tabla ese registro
            }

    }

    public Documento actualizarDocumento(Integer iddocumento,
            String nombredoc, String descripcionDoc, String fecharealizacion,
            String elaboradopor) {
        Documento a = em.find(Documento.class, iddocumento); //se usa el entity manager para encontrarlo luego cuando se llame ActualizarUsuario se hace commit y va a persistir el usuario actualizado
        if (a != null) {
//            a.setiddocumento(iddocumento);
//            a.setnombredoc(nombredoc);
//            a.setDescripcioDoc(descripcionDoc);
//            a.setFechaRealizacion(fecharealizacion);
//            a.setElaboradoPor(elaboradopor);

        }
        return a;
    }

    public Collection<Documento> encontrarDocumento() { //encontrar todos los usuarios
        Query query = em.createQuery("SELECT a FROM Documento a ");// Ojo la sentencia está en Java Query Language, no SQL
        return (Collection<Documento>) query.getResultList(); // me guarda la lista de todos los usuarios en mi coleccion
    }

    public Documento encontrarDocUltimo(Integer iddocumento) {
        Query q = em.createQuery("SELECT  max(iddocumento) FROM Documento ar WHERE ar.iddocumento='" + iddocumento + "'");

        if (q.getResultList().isEmpty() == true) {
            return null;
        } else {
            ar = (Documento) q.getSingleResult();
            return ar;
        }
    }

    public Integer devolverId() {
        Integer i = 0;
        Query q = em.createQuery("SELECT a.iddocumento from Documento a ORDER BY a.iddocumento DESC LIMIT 1");
        if (q.getResultList().isEmpty() == true) {
            return 1;
        } else {
            i = (Integer) q.getResultList().get(0);
            return (i);
        }
    }

    public List<Documento> findAll() {
        Query query = em.createQuery("select object(o) from Documento as o");
        return (List<Documento>) query.getResultList(); // me guarda la lista de todos los usuarios en mi coleccion
    }

    public Documento ActualizarDocumento(Integer iddocumento) {
        em.getTransaction().begin();
        Documento e = this.encontrarDocumento(iddocumento);
        if (e != null) {
//            e.setiddocumento(iddocumento);
        } else {
            JOptionPane.showMessageDialog(null, "Error al actualizar Documento", null, JOptionPane.ERROR_MESSAGE);
        }
        em.getTransaction().commit();
        return e;
    }

    public boolean crearDocumento(Object entidad) {
        boolean flag = true;
        EntityManagerFactory emf = Persistence.createEntityManagerFactory("sischoolPU");
        EntityManager em = emf.createEntityManager();
        EntityTransaction trans = em.getTransaction();

        trans.begin();
        em.persist(entidad);
        trans.commit();


        return flag;

    }

    public boolean borrarDocumento(Object entidad) {

        boolean flag = true;
        EntityManagerFactory emf = Persistence.createEntityManagerFactory("sischoolPU");
        EntityManager em = emf.createEntityManager();
        EntityTransaction trans = em.getTransaction();

        trans.begin();
        em.remove(em.merge(entidad));
        trans.commit();

        return flag;

    }

    public boolean updateDocumento(Object entidad) {
        boolean flag = true;
        EntityManagerFactory emf = Persistence.createEntityManagerFactory("sischoolPU");
        EntityManager em = emf.createEntityManager();
        EntityTransaction trans = em.getTransaction();

        trans.begin();
        em.merge(entidad);
        trans.commit();

        return flag;

    }
}
